#include <iostream>
#include <string>
#include <vector>

using namespace std;

// void print_vector(vector<char>& v) {

//     for (vector<char>::const_iterator it = v.begin(); it != v.end(); it++) {
//         cout << *it;
//     }
//     cout<<endl;

// }

// class Solution {
// public:
//     bool isPalindrome(string s) {
//         vector<char> new_string;
//         int s_length = s.size();
//         if (s_length == 0) return false;
//         if (s_length == 1) return true;
//         for (size_t i = 0; i < s_length; i++)
//         {
//             if ((s[i]>=97 && s[i]<=122) || (s[i]>=48 && s[i]<=57)) {
//                 new_string.push_back(s[i]);
//             }
//             if ((s[i]>=65 && s[i]<=90))
//             {
//                 new_string.push_back(s[i] + 32);
//             }
            
//         }
//         // print_vector(new_string);
//         bool flag = true;
//         int i = 0;
//         int n = new_string.size();
//         while (i <= n - 1 - i)
//         {
//             if (new_string[i] != new_string[n - 1 - i]) {
//                 flag = false;
//                 break;
//             }
//             i++;
//         }
//         return flag;
//     }
// };



class Solution {
public:
    bool isPalindrome(string s) {

        int s_length = s.size();
        if (s_length == 0) return false;
        if (s_length == 1 && s[0] != ' ') return true;
        bool flag = true;
        int i = 0, j = s_length - 1;
        while (i < j)
        {

            if (!((s[i]>=97 && s[i]<=122) || (s[i]>=48 && s[i]<=57) || (s[i]>=65 && s[i]<=90))) {
                i++;
                continue;
            }
            else if (!((s[j]>=97 && s[j]<=122) || (s[j]>=48 && s[j]<=57) || (s[j]>=65 && s[j]<=90))) 
            {
                j--;
                continue;
            }
            else
            {
                if (s[i]>=65 && s[i]<=90) s[i] = s[i] + 32;
                if (s[j]>=65 && s[j]<=90) s[j] = s[j] + 32;
                if (s[i] != s[j]) {
                    flag = false;
                    break;
                }
                i++;
                j--;
            }
            
        }
        return flag;
    }
};


int main(int argc, char* argv[]) {

    Solution solver;
    string s1 = "A man, a plan, a canal: Panama";
    bool result = solver.isPalindrome(s1);
    cout << result << endl;
    return 0;
}